Comment utiliser SFTP pour transférer des fichiers en toute sécurité avec un serveur distant

Sommaire

Comment se connecter avec SFTP

Obtenir de l'aide dans SFTP

Naviguer avec SFTP

Transférer des fichiers avec SFTP

Transférer des fichiers distants vers le système local

« downloading » en une seule ligne de commande

Transférer des fichiers locaux vers le système distant

« uploading » en une seule ligne de commande

Manipulations simples de fichiers avec SFTP

Liens

 

FTP, ou « File Transfer Protocol » (protocole de transfert de fichiers) était une méthode non cryptée populaire utilisée pour transérer des fichiers entre deux systèmes distants.

SFTP, qui signifie SSH File Transfer Protocol (protocole de transfert de fichiers SSH ou protocole de transfert de fichiers sécurisé) est un protocole distinct intégrant SSH, qui fonctionne de manière similaire mais via une connexion sécurisée. Il présente l'avantage de pouvoir tirer parti d'une connexion sécurisée pour transférer des fichiers et traverser le système de fichiers à la fois sur le système local et sur le système distant.

Dans la plupart des cas, il est préférable d'utiliser le SFTP au lieu du FTP, en raison de ses fonctionnalités de sécurité sous-jacentes et de sa capacité à se greffer sur une connexion SSH. FTP est un protocole non sécurisé qui ne doit être utilisé que dans certains cas ou sur des réseaux de confiance.

Bien que le SFTP soit intégré à de nombreux outils graphiques, ce guide vous expliquera de quelle manière l'utiliser via son interface de ligne de commande interactive.

Comment se connecter avec SFTP

SFTP utilise le protocole SSH par défaut pour s'authentifier et établir une connexion sécurisée. Pour cette raison, les mêmes méthodes d'authentification que celles présentes dans SSH sont mises à disposition.

Bien que les mots de passe soient faciles à utiliser et configurés par défaut, nous vous recommandons de créer des clés SSH et de transférer votre clé publique à tous les systèmes auxquels vous devez accéder. Cette méthode est bien plus sécurisée et vous permet de gagner du temps sur le long terme.

Veuillez vous reporter à ce guide pour configurer des clés SSH et accéder ainsi à votre serveur, si vous ne l'avez pas encore fait.

Si vous arrivez à vous connecter à la machine en utilisant SSH, cela signifie que vous avez rempli toutes les conditions requises pour gérer les fichiers à l'aide de SFTP. Testez l'accès à SSH à l'aide de la commande suivante :

ssh sammy@your_server_ip_or_remote_hostname

 

Si cela fonctionne, ressortez en saisissant :

exit

 

Désormais, nous pouvons établir une session SFTP en émettant la commande suivante :

sftp sammy@your_server_ip_or_remote_hostname

 

Votre connexion au système distant sera établie et votre invite se transformera en une invite SFTP.

Si vous travaillez sur un port SSH personnalisé (et non pas sur le port 22 par défaut), vous pouvez alors ouvrir une session SFTP de la manière suivante  :

sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

 

Ceci établira votre connexion au système distant via le port que vous avez spécifié.

Obtenir de l'aide dans SFTP

La commande la plus utile que vous devez apprendre à utiliser en premier est la commande d'aide. Elle vous permet d'accéder à un résumé de l'aide de SFTP. Vous pouvez l'appeler en saisissant l'une ou l'autre des options suivantes dans l'invite :

help

 

ou

?

 

Une liste des commandes disponibles s'affichera :

Output

Available commands:

bye                                Quit sftp

cd path                            Change remote directory to 'path'

chgrp grp path                     Change group of file 'path' to 'grp'

chmod mode path                    Change permissions of file 'path' to 'mode'

chown own path                     Change owner of file 'path' to 'own'

df [-hi] [path]                    Display statistics for current directory or

                                   filesystem containing 'path'

exit                               Quit sftp

get [-Ppr] remote [local]          Download file

help                               Display this help text

lcd path                           Change local directory to 'path'

. . .

Nous allons explorer certaines des commandes que vous allez aborder dans les sections suivantes.

Naviguer avec SFTP

Un certain nombre de commandes qui fonctionnement de la même manière que leurs homologues shell nous permettent de naviguer dans la hiérarchie de fichiers du système distant.

Tout d'abord, cherchons à savoir dans quel répertoire du système distant nous nous trouvons actuellement. Tout comme dans une session shell type, nous pouvons saisir ce qui suit pour obtenir le répertoire actuel :

pwd

 

Output

Remote working directory: /home/demouser

Nous pouvons consulter le contenu du répertoire actuel du système distant à l'aide d'une autre commande commune :

ls

 

Output

Summary.txt     info.html       temp.txt        testDirectory

Notez que les commandes de l'interface SFTP ne sont pas similaires aux commandes shell normales et ne sont pas aussi riches en fonctionnalités. Elles permettent cependant d'implémenter certaines des balises optionnelles les plus importantes :

ls -la

 

Output

drwxr-xr-x    5 demouser   demouser       4096 Aug 13 15:11 .

drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..

-rw-------    1 demouser   demouser          5 Aug 13 15:04 .bash_history

-rw-r--r--    1 demouser   demouser        220 Aug 13 15:02 .bash_logout

-rw-r--r--    1 demouser   demouser       3486 Aug 13 15:02 .bashrc

drwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache

-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile

. . .

Pour accéder à un autre répertoire, nous pouvons lancer la commande suivante :

cd testDirectory

 

Maintenant que nous pouvons traverser le système de fichiers distant, qu'en est-il si nous devons accéder à notre système de fichiers local ? Nous pouvons diriger les commandes vers le système de fichiers local en les faisant précéder d'un l pour local.

Toutes les commandes abordées jusqu'à maintenant disposent d'équivalents en local. Nous pouvons imprimer le répertoire de travail local :

lpwd

 

Output

Local working directory: /Users/demouser

Nous pouvons lister le contenu du répertoire actuel sur la machine locale :

lls

 

Output

Desktop         local.txt       test.html

Documents       analysis.rtf        zebra.html

Nous pouvons également changer le répertoire avec lequel nous souhaitons interagir sur le système local :

lcd Desktop

 

Transférer des fichiers avec SFTP

L'utilité de la navigation dans les systèmes de fichiers distants et locaux reste limitée si nous ne pouvons pas transférer des fichiers entre les deux.

Transférer des fichiers distants vers le système local

Pour télécharger des fichiers à partir de notre hébergement local, vous pouvez passer la commande suivante :

get remoteFile

 

Output

Fetching /home/demouser/remoteFile to remoteFile

/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

Comme vous pouvez le voir, par défaut, la commande get télécharge un fichier distant vers un fichier qui porte le même nom sur le système de fichiers local.

Nous pouvons copier le fichier distant en utilisant un autre nom, en spécifiant le nom par la suite :

get remoteFile localFile

 

La commande get prend également en charge quelques balises d'option. Par exemple, nous pouvons copier un répertoire et l'intégralité de son contenu en spécifiant l'option récursive suivante :

get -r someDirectory

 

Nous pouvons dire au SFTP de maintenir les autorisations et les temps d'accès appropriés en utilisant la balise -P ou -p :

get -Pr someDirectory

« downloading » en une seule ligne de commande

Pour télécharger « downloading » un fichier depuis un serveur distant, utilisez la syntaxe de la commande ci-dessous :

$ sftp {user}@{remote-host}:{remote-file-name} {local-file-name}  # un fichier

$ sftp -r [user]@host[:port][/dest_path] [/local_path]            # un dossier

Exemple pour un fichier

$ sftp ftpuser@192.168.1.231:/home/ftpuser/new_file1 /home/abhisheknair/new_local_dir

ftpuser@192.168.1.231's password:

Connected to 192.168.1.231.

Fetching /home/ftpuser/new_file1 to /home/abhisheknair/new_local_dir/new_file1

/home/ftpuser/new_file1                                                               100%   12     3.6KB/s   00:00

$

Exemple pour un dossier

[root@sftp-client ~]# sftp -r deepak@sftp-server:dest_dir/sftp-server_dir /tmp/

Connected to sftp-server.

Fetching /dest_dir/sftp-server_dir/ to /tmp/sftp-server_dir

Retrieving /dest_dir/sftp-server_dir

Transférer des fichiers locaux vers le système distant

Il est tout aussi facile de transférer des fichiers vers le système distant en utilisant la commande qui s'appelle, à juste titre, « put » :

put localFile

 

Output

Uploading localFile to /home/demouser/localFile

localFile                                     100% 7607     7.4KB/s   00:00

Les mêmes balises que celles qui fonctionnent avec get s'appliquent à put. Donc, si vous souhaitez copier un répertoire local entier, vous pouvez lancer la commande suivante :

put -r localDirectory

La commande df est un outil pratique, communément utilisé pour télécharger et envoyer des fichiers. Elle fonctionne de la même manière que la version avec ligne de commande. Grâce à elle, vous pouvez vérifier si vous disposez d'assez d'espace pour procéder aux transferts que vous souhaitez effectuer :

df -h

 

Output

    Size     Used    Avail   (root)    %Capacity

  19.9GB   1016MB   17.9GB   18.9GB           4%

Notez qu'il n'existe pas de variation locale de cette commande, mais nous pouvons contourner cela en émettant la commande ! .

La commande ! nous amène dans un shell local, où nous pouvons exécuter toute commande disponible sur notre système local. Nous pouvons vérifier l'utilisation du disque en saisissant :

!

 

et puis

df -h

 

Output

Filesystem      Size   Used  Avail Capacity  Mounted on

/dev/disk0s2   595Gi   52Gi  544Gi     9%    /

devfs          181Ki  181Ki    0Bi   100%    /dev

map -hosts       0Bi    0Bi    0Bi   100%    /net

map auto_home    0Bi    0Bi    0Bi   100%    /home

Toute autre commande locale fonctionnera comme prévu. Pour revenir à votre session SFTP, saisissez :

exit

Maintenant, vous devriez voir apparaître l'invite SFTP.

« uploading » en une seule ligne de commande

Vous trouverez ci-dessous une démo montrant le «uploading »  de fichiers à l'aide de sftp en une seule ligne :

$ sftp {user}@{host}:{remote-path} <<< $'put {local-path}'  # pour un fichier

Exemple pour un fichier

$ sftp ftpuser@192.168.1.231:/home/ftpuser/remote_test_dir <<< $'put /home/abhisheknair/new_file'

ftpuser@192.168.1.231's password:

Connected to 192.168.1.231.

Changing to: /home/ftpuser/remote_test_dir

sftp> put /home/abhisheknair/new_file

Uploading /home/abhisheknair/new_file to /home/ftpuser/remote_test_dir/new_file

/home/abhisheknair/new_file                                                           100%    9     7.2KB/s   00:00

$

Syntaxe

Manipulations simples de fichiers avec SFTP

SFTP vous permet d'effectuer le type de maintenance de base sur les fichiers qui vous est utile lorsque vous travaillez avec des hiérarchies de fichiers.

Par exemple, vous pouvez modifier le propriétaire d'un fichier sur le système distant en utilisant :

chown userID file

 

À la différence de la commande chmod du système, vous remarquerez que la commande SFTP n'accepte pas les noms d'utilisateur, mais utilise des UID à la place. Malheureusement, il n'existe aucun moyen facile de connaître l'UID correspondant à partir de l'interface SFTP.

Vous pourriez contourner le problème avec :

get /etc/passwd

!less passwd

 

Output

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

. . .

Notez qu'au lieu d'utiliser la commande ! proprement dite, nous l'avons utilisée comme préfixe pour une commande shell locale. Cette méthode fonctionne pour exécuter toute commande disponible sur notre machine locale, et aurait pu être utilisée avec la commande df locale que nous avons abordée précédemment.

L'UID se trouvera dans la troisième colonne du fichier, délimitée par des deux-points.

De la même façon, nous pouvons modifier le propriétaire de groupe d'un fichier en utilisant :

chgrp groupID file

 

Encore une fois, il n'existe aucun moyen facile d'obtenir une liste des groupes du système distant. Nous pouvons le faire avec la commande suivante :

get /etc/group

!less group

 

Output

root:x:0:

daemon:x:1:

bin:x:2:

sys:x:3:

adm:x:4:

tty:x:5:

disk:x:6:

lp:x:7:

. . .

La troisième colonne contient l'ID du groupe associé au nom de la première colonne. C'est ce que nous voulons.

Heureusement, la commande chmod fonctionne comme prévu sur le système de fichiers distant :

chmod 777 publicFile

 

Output

Changing mode on /home/demouser/publicFile

Il n'existe aucune commande pour manipuler les autorisations des fichiers locaux, mais vous pouvez configurer l'umask local de manière à ce que tous les fichiers copiés sur le système local disposent des autorisations correspondantes.

Pour cela, vous pouvez utiliser la commande lumask :

lumask 022

 

Output

Local umask: 022

Maintenant, tous les fichiers réguliers téléchargés (sous réserve que la balise -p ne soit pas utilisée) auront 644 autorisations.

SFTP vous permet de créer des répertoires sur des systèmes locaux et distants avec lmkdir et mkdir, respectivement. Ces commandes fonctionnent comme prévu.

Le reste des commandes de fichier cible uniquement le système de fichiers distant :

ln

rm

rmdir

 

Ces commandes répliquent le comportement de base des versions shell. Si vous devez effectuer ces actions sur le système de fichiers local, n'oubliez pas que vous pouvez vous connecter à un shell en lançant la commande suivante :

!

 

Ou exécutez une seule commande sur le système local en faisant précédant la commande d'un ! comme suit :

!chmod 644 somefile

 

Une fois que vous en aurez terminé avec votre session SFTP, utilisez exit ou bye pour mettre fin à la connexion.

bye

 

Liens

10 single line SFTP commands to transfer files in Unix/Linux

Linux sftp restrict user to specific directory | setup sftp chroot jail